package cn.wolfcode.springcloud.feign;

import cn.wolfcode.springcloud.domain.Product;
import cn.wolfcode.springcloud.service.IProductService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RestController;

/**
 * 测试：重启8761服务
 * springcloud推崇的不适用controller进行对外提供接口服务，使用feign客户端方式

 其实本质还是controller，换一种写法而已。
 */
@RestController
public class ProductFeignClient implements IProductFeignApi {

    @Autowired
    private IProductService productService;
//获取配置文件中的端口
    @Value("${server.port}")
    private String port;

    @Override
    public Product get(Long id) {
        System.out.println("ProductFeignClient..get...");

        Product product = productService.get(id);
        //想让order-server服务调用product集群时,知道调用哪一个服务(8080?8081?)
        //product.setName(product.getName() + "-" + port);
        //模拟网络延时
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //此时会报超时，feign在一秒内不能返回默认超时
//修改feign的默认配置一秒改为5秒但是现实开发中不会
        //模拟出问题，请求服务时候就会走降级操作
        //int i = 1/0;

        //防止端口重复拼接
        Product pp = new Product();
        BeanUtils.copyProperties(product,pp);
        pp.setName(product.getName() + "-" + port);
        return pp;
    }
}